在本发明的一个实施例中,包括一种计算机实施的方法,用于测量在硬件客户端-服务器环境中实现的计算机程序中的瓶颈。所述方法包括定义用于测量硬件客户端-服务器环境的执行参数。所述方法还包括修改代码块,使其包括测控代码。所述测控代码与执行参数有关。所述方法还包括在硬件客户端-服务器环境中执行已被修改的代码块。所述方法还包括生成从执行代码块得到的、与执行参数有关的测控数据。所述方法还包括输出已被生成的测控数据。通过这种方式,可以测量瓶颈;可以将所测量的瓶颈排序;可以识别出值得注意的瓶颈;并且可以调整硬件客户端-服务器环境的各个方面以便应对瓶颈问题。排序是有帮助的,因为可能检测和测量出成千上万的同步点,但是它们中的很多并不代表需要被纠正的问题。
1.一种用于测量在硬件客户端-服务器环境中实现的计算机程序中的瓶颈的计算机实现的方法,包括:定义用于测量的执行参数,其中,所述执行参数与计算机程序中的瓶颈有关,其中执行参数包括并行性参数、吞吐量参数、限制吞吐量参数和利用率参数中的至少一个;修改多个代码块中的每个代码块,使其包括测控代码,其中所述测控代码与所述执行参数相关;执行已被修改的多个代码块;生成从执行多个代码块得到的、与所述执行参数相关的测控数据;以及输出已被生成的测控数据,其中,使用低处理负载测量瓶颈,其中低处理负载是通过计算机程序执行的单个例程,其中该单个例程用于跟踪瓶颈以及描述执行参数。
2.根据权利要求1所述的计算机实现的方法,其中所述计算机程序是由硬件服务器计算机执行的第一Java语言程序,所述第一Java语言程序访问由硬件服务器计算机存储的信息,并且与硬件客户端计算机所执行的第二Java语言程序交互。
3.根据权利要求1所述的计算机实现的方法,其中所述计算机程序是由硬件应用服务器执行的第一Java语言程序,所述第一Java语言程序与硬件数据库服务器交互,并且与由硬件客户端计算机执行的第二Java语言程序交互。
4.根据权利要求1所述的计算机实现的方法,其中修改每个代码块的步骤包括:识别所述多个代码块中的同步代码块;在所述同步代码块的开始处添加监控器进入命令;以及在所述同步代码块的结束处添加监控器退出命令。
5.根据权利要求1所述的计算机实现的方法,其中所述多个代码块是根据具有低负载的硬件服务器计算机来执行的。
6.根据权利要求1所述的计算机实现的方法,其中所述执行的步骤包括:获得对于硬件数据库服务器计算机所实现的数据库中存储的信息的锁定;得到与所述数据库的连接;执行访问所述信息的数据库命令;以及释放所述锁定。
7.根据权利要求1所述的计算机实现的方法,其中所述测控数据包括位置标识符、线程标识符、监控器标识符、进入时间和退出时间中的至少一个。
8.根据权利要求1所述的计算机实现的方法,其中所述测控数据包括位置标识符、吞吐量量度、通过时间量度、限制吞吐量量度和使用率量度中的至少一个。
9.根据权利要求1所述的计算机实现的方法,其中所述测控数据根据使用率量度按降序输出。
10.根据权利要求1所述的计算机实现的方法,还包括:根据响应于输出测控数据的用户输入来调整硬件客户端-服务器环境。
11.根据权利要求1所述的计算机实现的方法,还包括:根据响应于输出测控数据的用户输入来调整在硬件客户端-服务器环境中的应用服务器。
12.根据权利要求1所述的计算机实现的方法,还包括:根据响应于输出测控数据的用户输入来调整在硬件客户端-服务器环境中的应用服务器中的虚拟机。
13.一种用于测量在硬件客户端-服务器环境中实现的计算机程序中的瓶颈的计算机实现的装置,包括:用于定义用于测量的执行参数的装置,其中,所述执行参数与计算机程序中的瓶颈有关,其中执行参数包括并行性参数、吞吐量参数、限制吞吐量参数和利用率参数中的至少一个;用于修改多个代码块中的每个代码块使其包括测控代码的装置,其中所述测控代码与所述执行参数相关;用于执行已被修改的多个代码块的装置;用于生成从执行多个代码块得到的、与所述执行参数相关的测控数据的装置;以及用于输出已被生成的测控数据的装置,其中,使用低处理负载测量瓶颈,其中低处理负载是通过计算机程序执行的单个例程,其中该单个例程用于跟踪瓶颈以及描述执行参数。
14.根据权利要求13所述的计算机实现的装置,其中用于修改每个代码块的装置包括:用于识别所述多个代码块中的同步代码块的装置;用于在所述同步代码块的开始处添加监控器进入命令的装置;以及用于在所述同步代码块的结束处添加监控器退出命令的装置。
15.根据权利要求13所述的计算机实现的装置,其中用于执行已被修改的多个代码块的装置包括:用于获得对于硬件数据库服务器计算机所实现的数据库中存储的信息的锁定的装置;用于得到与所述数据库的连接的装置;用于执行访问所述信息的数据库命令的装置;以及用于释放所述锁定的装置。
16.根据权利要求13所述的计算机实现的装置,其中所述测控数据根据使用率量度按降序输出。
17.根据权利要求13所述的计算机实现的装置,还包括:用于根据响应于输出测控数据的用户输入来调整硬件客户端-服务器环境的装置。
18.根据权利要求13所述的计算机实现的装置,还包括:用于根据响应于输出测控数据的用户输入来调整在硬件客户端-服务器环境中的应用服务器的装置。
19.根据权利要求13所述的计算机实现的装置,还包括:用于根据响应于输出测控数据的用户输入来调整在硬件客户端-服务器环境中的应用服务器中的虚拟机的装置。
技术领域本发明涉及测量瓶颈,更具体而言,涉及测量在客户端-服务器环境中的瓶颈。
背景技术除非在文中另行指出,否则在本部分描述的方法不是本申请权利要求的现有技术,并且也不因其包括在本部分中而承认其是现有技术。Java
TM编程语言是高级语言,具有所有如下术语描述的特征:简单、面向对象、分布式、多线程、动态、架构中立(architecturexa0neutral)、可移植、高性能、鲁棒和安全。关于这些术语中每一个的进一步细节可以从Jamesxa0Gosling和Henryxa0McGilton所著的“Thexa0Java
TMxa0Languagexa0Environment”(Java
TM语言环境)中得到。在Java
TM编程语言中,首先以普通文本文件的形式编写源代码,该普通文本文件以.java扩展名结束。然后通过诸如javac的Java
TM编译器将这些源文件编译成.class文件。.class文件不包含物理处理器的本机(native)的代码,相反,它包括字节代码-Java
TM虚拟机(Java
TMxa0VM)的机器语言。接着,启动器工具(launcherxa0tool)(java.exe或其它Java
TM运行时环境)利用Java
TMxa0VM的实例来运行应用。Java
TMxa0VM通过将Java
TM字节代码转换为特定于实际的操作系统和计算设备的处理器的本机指令来运行应用。因为字节代码被设计为可移植的,而Java
TMxa0VM是特定于实际计算设备的,所以可修改Java
TMxa0VM,以便执行更多种类的任务而仍然保持符合Java
TM标准。一般而言,可由服务器向客户端提供用于执行的Java
TM程序。在诸如由Java
TM企业版提供的客户端-服务器企业环境中,服务器也可以执行Java
TM程序,该Java
TM程序与客户端所执行的Java
TM程序通信,并且与服务器所执行的数据库应用接口。当客户端访问服务器存储的信息时,这些Java
TM程序可能包含瓶颈。例如,当服务器锁定正由用户访问的数据时,可能在服务器产生瓶颈。当Java
TM程序由多个客户端执行时,这些瓶颈引起的延时可能增加。一种测量瓶颈的方式如下。首先,向服务器提供高负载。这有助于识别由可伸缩性(scalability)问题导致的瓶颈。第二,执行软件并且测量所表现的等待时间。第三,识别瓶颈并应对(address)瓶颈问题。第四,重复进行上述执行、测量、识别和应对的步骤以识别更多的瓶颈,因为某些瓶颈可能隐藏了其它的瓶颈。在如上的方式中,很多现有的系统串行地检测和去除瓶颈。而且,瓶颈并不局限于Java
TM语言实现中。瓶颈也可能出现在为了保持数据完整性而进行协调访问的其它分布式计算环境中。
发明内容本发明的实施例提高了硬件客户端-服务器环境的性能。在本发明的一个实施例中,包括一种用于测量在硬件客户端-服务器环境中实现的计算机程序中的瓶颈的计算机实现的方法,包括:定义用于测量的执行参数,其中,所述执行参数与计算机程序中的瓶颈有关,其中执行参数包括并行性参数、吞吐量参数、限制吞吐量参数和利用率参数中的至少一个;修改多个代码块中的每个代码块,使其包括测控(instrumentation)代码,其中所述测控代码与所述执行参数相关;执行已被修改的多个代码块;生成从执行多个代码块得到的、与所述执行参数相关的测控数据;以及输出已被生成的测控数据,其中,使用低处理负载测量瓶颈,其中低处理负载是通过计算机程序执行的单个例程,其中该单个例程用于跟踪瓶颈以及描述执行参数。在本发明的另一个实施例中,包括一种用于测量在硬件客户端-服务器环境中实现的计算机程序中的瓶颈的计算机实现的装置,包括:用于定义用于测量的执行参数的装置,其中,所述执行参数与计算机程序中的瓶颈有关,其中执行参数包括并行性参数、吞吐量参数、限制吞吐量参数和利用率参数中的至少一个;用于修改多个代码块中的每个代码块使其包括测控代码的装置,其中所述测控代码与所述执行参数相关;用于执行已被修改的多个代码块的装置;用于生成从执行多个代码块得到的、与所述执行参数相关的测控数据的装置;以及用于输出已被生成的测控数据的装置,其中,使用低处理负载测量瓶颈,其中低处理负载是通过计算机程序执行的单个例程,其中该单个例程用于跟踪瓶颈以及描述执行参数。通过这种方式,可以测量瓶颈;可以将所测量的瓶颈排序;可以识别出值得注意的瓶颈;并且可以调整硬件客户端-服务器环境的各个方面以便应对瓶颈问题。排序是有帮助的,因为可能检测和测量出成千上万的同步点,但是它们中的很多并不代表需要被纠正的问题。如下的详细说明和附图提供了对本发明的本质和有益效果的更好理解。
附图说明图1A-1B说明了瓶颈如何能够隐藏另一个瓶颈。图2是根据本发明实施例的客户端-服务器环境的框图。图3是根据本发明实施例的测量瓶颈的过程的流程图。图4说明了根据本发明实施例的瓶颈度量(metrics)。图5A-5B说明了根据本发明实施例的代码块修改的例子。图6是用于实现本发明实施例的计算机系统和网络1400的例子的框图。图7A-7C说明了在计算机程序系统中如何检测和去除瓶颈。图8A-8B说明了根据本发明实施例如何测量瓶颈。
具体实施方式在此描述用于识别计算机程序中的瓶颈的技术。在下面的描述中,出于解释的目的,阐述了许多例子和特定细节,以便提供对本发明的全面理解。然而,对于本领域技术人员来说明显的是,由权利要求限定的本发明可以单独包括这些例子中的一些或所有特征,或包括这些例子中的一些或所有特征与下面描述的其它特征的组合,并且可进一步包括对在此描述的特征和发明构思的修改和等效形式。一般而言,网络服务器被设计成并行处理多个请求。理想情况下,服务器不会将请求一个接一个地串行化。然而,服务器的一些组件需要同步(例如,数据存储单元),所以服务器同步这些请求,并且导致被同步的代码段彼此等待。这种临界区(criticalxa0section)被称作“瓶颈”。当两个请求想要进入这种临界区时,它们中只有一个进入,而另一个等待。如果更多的请求到达,那么它们也要等待。这可以称作对单个请求(或单个例程)的“等待时间”。而且,如果一个临界区在另一个临界区内部(称作“嵌套(nesting)”),那么没有请求会等待该内部临界区,因此该内部临界区保持“隐藏”。相似地,任何其它嵌套的临界区都将保持隐藏。图1A-1B说明了瓶颈如何能够隐藏另一个瓶颈。图1A说明了瓶颈隐藏,图1B说明了瓶颈串行化。箭头表示并行运行的子进程,例如,Java
TM线程;它们可以对应于由服务器处理的客户端请求。在图1A中,瓶颈12导致等待时间14,而瓶颈16导致等待时间18。瓶颈12隐藏瓶颈16。直到识别出瓶颈12并且应对瓶颈12时瓶颈16才变得明显。在图1B中,瓶颈22导致等待时间24,而瓶颈26导致等待时间28。瓶颈22将例程串行化,从而使得瓶颈26与诸如等待时间和竞争之类的任何并发效应无关。一旦瓶颈22被识别和应对,瓶颈26的等待时间28就能够被识别和应对。图7A-7C提供了关于瓶颈串行化的更多细节。图7A-7C说明了在计算机程序系统中如何检测和去除瓶颈。图7A说明了在计算机程序系统中能被形象化为管道(pipe)的处理流700。处理流700具有B1和B2两个瓶颈。瓶颈B1和B2可以对应于计算机程序的同步点。图7B说明了将高处理负载702施加于处理流700。瓶颈B1约束处理负载702。通过在点704和点706处测量处理流700并记录差别来检测瓶颈B1。注意,可能检测不到瓶颈B2,因为在点706和点708处的处理流之间没有差别。图7C说明了在瓶颈B1被检测和去除之后的处理流700(对比图7B)。再次将高处理负载702施加于处理流700,现在瓶颈B2约束处理负载702。通过记录在点706和点708处的处理流之间的差别来检测瓶颈B2。图2是根据本发明实施例的客户端-服务器环境100的框图。客户端-服务器环境100包括通过网络连接的应用服务器102、客户端104和数据库服务器124。客户端-服务器环境100可被描述为“三层架构”。客户端-服务器环境100可以实现Java
TM企业版。客户端-服务器环境100的更具体的硬件细节可在图6中看到。网络可以是局域网、广域网或其它类型的网络,比如因特网。客户端104实现虚拟机112。虚拟机112可以是执行客户端104从应用服务器102接收的Java
TM程序的Java
TM虚拟机。客户端可以实现三层架构中的“表示层(presentationxa0tier)”。可以存在多于一个的客户端104。应用服务器102实现虚拟机122、应用(计算机程序)128和并发分析器(concurrencyxa0profiler)130。虚拟机122执行应用128(如下所述,并发分析器130可以修改应用128)。虚拟机122可以是执行Java
TM程序的Java
TM虚拟机。可向客户端104提供用于执行的一个或多个计算机程序128。计算机程序128可以是Java
TM程序。应用服务器102可以实现三层架构中的“应用层”。可以存在多于一个的应用服务器102。数据库服务器124实现数据库126。数据库126存储被查询、添加、删除等等的下层数据。数据库服务器124可以实现三层架构中的“数据层”。可以存在多于一个的数据库服务器124。在客户端-服务器环境100的日常操作中,可以忽略并发分析器130。以下是日常操作的例子。数据库126存储会计数据(accountingxa0data)。数据库服务器124在数据库126和其它硬件或用户接口组件之间接口,以便例如向数据库126添加数据,向数据库126发送查询或其它数据操作,从数据库126提取信息用于显示或报告等等。虚拟机122在数据库服务器124和客户端104之间接口,以便例如执行从客户端104接收要添加到数据库126的数据的程序,执行从客户端104接收数据操作请求的程序,或者执行将所提取的信息发送给客户端104以供显示的程序等等。通过执行计算机程序128来控制虚拟机122的这些动作。虚拟机122的这些动作可能遇到瓶颈。并发分析器130可以在应用服务器102中实现,用以检测当虚拟机122执行计算机程序128时引起的瓶颈。在与数据库服务器124交互或访问数据库126时的数据锁定可能导致这些瓶颈。在客户端-服务器环境中,与客户端104的交互可能导致这些瓶颈。以下将提供并发分析器130的更多细节。图3是根据本发明实施例的测量瓶颈的过程200的流程图。过程200可以由并发分析器130实现。并发分析器130可以执行计算机程序来实现过程200。所述计算机程序可以与计算机程序128一起存储。实现过程200的计算机程序可用Java
TM语言编写。在步骤202,定义用于测量的一个或多个执行参数。所述执行参数与应用服务器102执行的计算机程序128有关。执行参数可以包括并行性(parallelism)参数、吞吐量(throughput)参数、通过时间(throughxa0time)参数、限制吞吐量(limitxa0throughput)参数和利用率参数。执行参数与计算机程序128中的瓶颈有关。下面会更详细地讨论执行参数。在步骤204,修改将对其瓶颈进行评估的计算机程序,以使其包含测控代码(instrumentationxa0code)。计算机程序包括代码块,诸如小型应用程序(applet)、类、函数、过程、方法、对象、接口、变量等等。将测控代码添加到一个或多个代码块,以便可以测量那个代码块的执行参数。在步骤206,执行修改后的代码块。当由应用服务器102实现时,并发分析器130将修改后的代码块提供给虚拟机122以供执行。在步骤208,因为在步骤206中执行了修改后的代码块,所以生成了测控数据(instrumentationxa0data)。测控数据对应于执行参数,并且是执行修改后的代码块的结果。测控数据可以包括与每个瓶颈相关的信息,比如位置标识符、线程标识符、监控器(monitor)标识符、进入时间和退出时间。测控数据可以包括性能信息,诸如吞吐量量度(measurement)、通过时间量度、限制吞吐量量度和利用率量度。在步骤210,输出测控数据。根据一个实施例,并发分析器130指令虚拟机122向客户端104发送测控数据,而虚拟机112指令客户端104显示测控数据以供用户细读。可将测控数据按照诸如利用率量度的参数降序排列或以其他方式显示,以便可以容易地识别出重要的瓶颈,以便纠正或去除。以下将提供关于客户端-服务器环境100、并发分析器130和过程200的更多细节。软件瓶颈如上面所讨论的,瓶颈导致吞吐量减少。在计算机程序中,典型地,瓶颈由于不同例程之间的同步点所导致。这些瓶颈是危险的,因为它们代表不能通过添加新的硬件来解决的逻辑限制。计算机程序瓶颈的例子包括并发锁定和资源限制。并发锁定用在不同的例程中以防止并发问题。一个例子是:在修改文件之前对文件设置独占(写)锁定,以及在读取文件之前对文件设置共享(读)锁定。当多个例程从有限资源集中获得资源时发生资源限制。一个例子是拥有十个数据库连接集合的程序。该程序能够并行服务多个客户端,但是在一个时间点最多只有十个客户端能够使用连接。根据本发明的实施例,在低负载的情况下分析可伸缩性问题。不需要大而昂贵的硬件。根据本发明的实施例,所有可能的瓶颈都被列出。没有一个隐藏。根据本发明的实施例,按照从最重要的瓶颈到最不重要的瓶颈的顺序对瓶颈进行测量和排序。图8A-8B说明了根据本发明实施例如何测量瓶颈。图8A与图7A相同,示出了处理流700以及瓶颈B1和B2。图8B示出了低处理负载712。作为例子,低处理负载712可以是通过计算机程序执行的单个例程。该单个例程可以被用于跟踪(trace)瓶颈并描述它们的度量(metric)。一个度量是能够同时通过瓶颈的例程的数量。另一个度量是该单个例程通过瓶颈所需要的时间。以下将更详细地描述所述度量。定义瓶颈度量考虑如下的例子。小型网络服务器具有一个数据库连接。许多并行请求进行如下操作:1.获得显式锁定(explicitxa0lock)(请求可能在此等待)。2.得到连接。3.执行数据库命令,例如,SQL(结构化查询语言)操作,大约0.05秒。4.释放该显式锁定。假设负载的速率是每秒7个请求,将得到如下的计算。每个操作占用0.05秒,所以可以执行最多每秒20个操作(1/0.05=20)。当前的负载是每秒7个操作,所以瓶颈“利用率”是35%。如果负载达到最多每秒20个操作,那么利用率将变为100%。定义如下度量:并行性[P]、吞吐量[T]、通过时间[△t]、限制吞吐量[μT]和利用率[U]。并行性[P]是能够在瓶颈内部运行的例程的最大数目。该度量由计算机程序逻辑所隐含,并且不一定取决于硬件或负载。在如上的例子中,[P]=1,因为在一个时间点,仅仅一个请求可以利用该连接工作。如果我们有N个连接,则并行性将等于N。因此,并行性并非取决于负载,而是取决于瓶颈设计。吞吐量[T]是每秒的操作数量--每秒有多少例程通过瓶颈。这个度量取决于负载。通常,我们预期当负载加倍时吞吐量也加倍。通过时间[△t]是一个例程通过瓶颈所需要的时间。根据实施例,在非并发环境(即一个例程)中测量通过时间。这实现了“净”通过时间测量,不包括像等待时间这样的并发副作用。根据实施例,当操作并发分析器130时使用低负载。限制吞吐量[μT]是可以在特定时间内执行的操作的最大数量(例如,每秒操作的最大数量)。限制吞吐量从通过时间推导得出,如下所示:[μT]=[P]/[△t]在如上的例子中,[μT]=1/0.05=20个操作每秒。利用率[U]是吞吐量(测量的)与限制吞吐量之比,如下所示:[U]=[T]/[μT]在如上的例子中,[U]=7/20=35%。因为吞吐量不能大于限制吞吐量,所以0≤[U]≤1图4说明了这些瓶颈度量。通过时间[△t]由瓶颈400的高度表示。并行性[P]由瓶颈400的部分之间的宽度表示。吞吐量[T]由通过瓶颈400的例程(箭头402)表示。根据实施例,并发分析器130测量如上定义的度量,以计算所呈现的所有瓶颈的利用率。并发分析器130测控每个代码块并且记录如下信息中的一个或多个:位置(Location):这是瓶颈的类、方法和行数。线程(Thread):这是线程标识符(例程标识符)。监控器(Monitor):这是例程争夺的资源(例如同步监控器或锁定)。进入时间(Enterxa0time):这是线程进入瓶颈的时间。退出时间(Exitxa0time):这是线程退出瓶颈的时间。可以通过字节代码修改来执行计算机程序的测控。根据并发分析器130测量Java
TM程序的实施例,同步的代码块可以被修改,如图5A-5B所示。图5A-5B说明了根据本发明实施例的代码块修改的例子。图5A示出了修改前的代码块,而图5B示出了修改后的代码块。在Java
TM实现中,Java
TM同步语句可以使用监控器的进入(monitorxa0enter)命令和监控器的退出(monitorxa0exit)命令在多个线程之间协调对对象的访问。因为每个线程写其自己的跟踪文件,因此避免了并发分析器130可能引起的任何竞争。例子并发分析器130的实施例可以被用于寻找在SPECjAppServer基准(benchmark)应用中的瓶颈,以增强可伸缩性。(例如,当具有完美的可伸缩性时,加倍硬件参数将使负载能力加倍。瓶颈的存在是完美的可伸缩性的障碍,所以识别和去除瓶颈将提高可伸缩性。)并发分析器130转换Java
TM服务器安装的所有二进制(binary)文件,大约是350个.jar文件。以交易处理率(transactionxa0rate)5来执行有效的运行(50个HTTP[超文本传输协议]客户端和15个RMI[远程方法调用]客户端)。(这些参数是负载测试参数,表示例如对应于客户端计算机数量的执行的负载。)并发分析器130生成报告,表1总结了该报告的顶层信息。
![]()
ntent="drawing" img-format="tif" inline="no" orientation="portrait" wi="700"/>表1使用报告中的信息(例如,表1),配置专家可以确定瓶颈可能涉及到应用服务器102的哪些方面,并且可以对这些方面进行调整以提高性能。可被调整的方面宽泛地包括配置问题、编程低效等等。更具体而言,配置专家可以调整用于实现应用服务器102的硬件组件、由应用服务器102执行的计算机程序的编程、虚拟机122的配置、由数据库服务器124执行的计算机程序的编程、Java数据库连接(Javaxa0Databa
sexa0Connectivity,JDBC)API驱动器的编程、网络的配置等等。如上所讨论的,测控代码块,并且使用(例如)一个请求/例程(称为“跟踪例程”)执行性能测量。这种跟踪例程不要求系统组件的高负载。根据如上阐述的测量度量来测量瓶颈。一旦瓶颈被测量,即可以将它们排序,以便识别最重要的瓶颈。然后,配置专家可以(如果期望的话)专注于应对重要的瓶颈,从而以给定的工作量达到最好的结果。图6是用于实现本发明实施例的示例性计算机系统和网络1400的框图。计算机系统1410包括总线1405或其它用于传送信息的通信机制,以及与总线1405耦接用于处理信息的处理器1401。计算机系统1410还包括耦接到总线1405的存储器1402,用于存储由处理器1401执行的信息和指令,包括用于执行如上所述技术的信息和指令。这个存储器还可以被用于在执行由处理器1401执行的指令期间存储临时变量或其它中间信息。这个存储器的可能实现方式可以是,但是不局限于,随机存取存储器(RAM)、只读存储器(ROM)、或它们两者。还提供存储设备1403,以用于存储信息和指令。该存储设备的常见形式包括,例如,硬盘驱动器、磁盘、光盘、CD-ROM、DVD、闪存、USB存储卡或者计算机能够读取的任何其它介质。举例来说,存储设备1403可以包括用于执行上述技术或具体化上述构造的源代码、二进制代码或软件文件。计算机系统1410可以通过总线1405耦接到显示器1412,诸如阴极射线管(CRT)或液晶显示器(LCD),显示器1412用于将信息显示给计算机用户。诸如键盘和/或鼠标的输入设备1411耦接到总线1405,用于将来自用户的信息和命令选择传送给处理器1401。这些组件的组合允许用户与系统通信。在一些系统中,总线1405可被分为多个专用总线。计算机系统1410还包括与总线1405耦接的网络接口1404。网络接口1404可以提供计算机系统1410与本地网络1420之间的双向数据通信。举例来说,网络接口1404可以是数字用户线(DSL)或调制解调器,用以提供电话线上的数据通信连接。网络接口的另一个例子是局域网(LAN)卡,用以提供到兼容的LAN的数据通信连接。无线链路是另一个例子。在任何一个这样的实现中,网络接口1404发送和接收电信号、电磁信号或光信号,所述信号携带表示各种类型的信息的数字数据流。计算机系统1410能够通过网络接口1404向内联网或因特网1430发送和接收信息,包括消息或其它接口动作。在因特网的例子中,软件组件或服务可位于网络中的多个不同的计算机系统1410或服务器1431、1432、1433、1434和1435中。服务器1431可将动作或消息从一个组件通过因特网1430、本地网络1420和网络接口1404发送到计算机系统1410的组件。计算机系统和网络1400可以是用于实现应用服务器102、客户端104和数据库服务器124的硬件。尽管如上的描述集中在Java
TM环境,但是也可以实现类似的实施例以识别和测量其它分布式计算环境中的瓶颈,包括ABAP
TM环境、C#环境和.NET
TM环境。如上描述说明了本发明的多种实施例以及如何实现本发明各方面的例子。如上的例子和实施例不应该被认为是仅有的实施例,它们被提出是为了说明由权利要求所定义的本发明的灵活性和有益效果。基于如上的公开内容和权利要求,其他排列、实施例、实现方式和等效方式对于本领域技术人员来说将是明显的,并且可以在不脱离由权利要求限定的本发明的精神和范围的前提下采用。